C#,如何提高DataGridView控件的显示效率?一次要管理100万条记录,如何才能不卡?不仅仅是虚拟模式的问题。

您所在的位置:网站首页 datagridview 刷新数据源 C#,如何提高DataGridView控件的显示效率?一次要管理100万条记录,如何才能不卡?不仅仅是虚拟模式的问题。

C#,如何提高DataGridView控件的显示效率?一次要管理100万条记录,如何才能不卡?不仅仅是虚拟模式的问题。

2023-04-02 10:00| 来源: 网络整理| 查看: 265

C#,如何提高DataGridView控件的显示效率?一次要管理100万条记录,如何才能不卡?不仅仅是虚拟模式的问题。

(1)采用virtualmode,不要使用datagridview1.datasource = dt

如何使用虚拟模式,参见https://blog.csdn.net/qq_30122639/article/details/53739607和https://bbs.csdn.net/topics/390948328?list=lz

分为两步:

1)将Accdb加载到datagridview的函数

public void LoadAccdb2Datagridview_Parent_VirtualMode_is_True(string accdbfilenameOpened_, string needTableName_, string resultTableName_, string password, bool IsShowAllGroundPtsDataOrOnlyCentralPts = false) { System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); //开始监视代码运行时间; //需要测试的代码; this.datatable_1 = new System.Data.DataTable(); this.datatable_2 = new System.Data.DataTable(); this.datatable_1 = MdbProcess.LoadAccdbTable2DataTable(accdbfilenameOpened_, needTableName_, password); this.datatable_2 = MdbProcess.LoadAccdbTable2DataTable_filter(accdbfilenameOpened_, resultTableName_, password, IsShowAllGroundPtsDataOrOnlyCentralPts); watch.Stop(); //停止监视 TimeSpan timespan = watch.Elapsed; //获取当前实例测量得出的总时间 System.Diagnostics.Debug.WriteLine("读取数据库执行时间: " + timespan.TotalMilliseconds + "毫秒," + timespan.TotalSeconds + "秒"); //总毫秒数 // // 给dataGridView增加列; if (this.dataGridView1.Columns.Count == 0) { foreach (System.Data.DataColumn column in this.datatable_1.Columns) { this.dataGridView1.Columns.Add(column.ColumnName, column.ColumnName); } } if (this.dataGridView2.Columns.Count == 0) { foreach (System.Data.DataColumn column in this.datatable_2.Columns) { this.dataGridView2.Columns.Add(column.ColumnName, column.ColumnName); } } //设置颜色 this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Beige; this.dataGridView2.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Beige; //设置VirtualMode为true if (this.dataGridView1.VirtualMode == false || this.dataGridView2.VirtualMode == false) { this.dataGridView1.VirtualMode = true; this.dataGridView2.VirtualMode = true; } //根据datatable设置dataGridView的显示行数,注意,dataGridView的AllowUsertoAddRows要设置成False this.dataGridView1.RowCount = this.datatable_1.Rows.Count ; // +1 ; this.dataGridView2.RowCount = this.datatable_2.Rows.Count ; // +1 ; }

2)dataGridView1_CellValueNeeded()函数

private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { int colCount = this.dataGridView1.ColumnCount; int colCount2 = this.dataGridView1.Columns.Count; if (e.RowIndex == this.dataGridView1.RowCount) { return; } else { //string colName = this.dataGridView1.Columns[e.ColumnIndex].Name; //e.Value = this.datatable_1.Rows[e.RowIndex][colName].ToString(); //或者 e.Value = this.datatable_1.Rows[e.RowIndex][e.ColumnIndex].ToString(); } }

 

(2)将datagridview1的AutoSizeColumnsMode和AutoSizeRowsMode属性都设置为None

C# 中的datagridview显示过慢的原因之一

Datagridview操作性能慢的问题

用datagridview绑定数据源,第一列是一个checkbox,用于标志是否选中。当光标点到这行时自动选中这个checkbox,并且提供全选与取消全选的功能,这本是一个很简单的功能,但出现的问题是,鼠标点中行时,自动勾选checkbox,给checkbox赋值的速度相当慢,全选和取消全选更不用说,几十行就慢得不行,更别说上百行上千行的数据,没半小时都别想循环完.

最后找出问题所在,Datagridview的AutoSizeColumnsMode!

不能把这个属性的值设置成Allcells****,否则将导致操作datagridview数据变得极慢.可以考虑换成displayedcells**,有相同的视觉效果,速度很快.

可惜不知道怎样调试到datagridview内部去,真想去看个究竟,这datagridview到底干了些啥事.

希望给搜索到这篇的朋友一个提醒. ---------------------  作者:三断笛  来源:CSDN  原文:https://blog.csdn.net/xxyj6450/article/details/9051011  版权声明:本文为博主原创文章,转载请附上博文链接!

(3) 将RowHeadersWidthSizeMode和ColumnHeadersHeightSizeMode属性设为DisableResizing(用户不能使用鼠标调整列标头的宽度)/EnableResizing(用户可以使用鼠标调整列标头的宽度),如果要显示行号,可以将RowHeadersWidthSizeMode设置为AutoSizeToFirstHeader

https://blog.csdn.net/weixin_34116110/article/details/85448837

严重影响DataGridView性能的2个属性

C# DataGridView显示行号的三种方法

https://blog.csdn.net/chenpeng0118/article/details/7402199

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3